/*
 * THE SOURCE CODES OF THE SOFTWARE ARE VALUABLE ASSETS OF FIDUS TECHNOLOGIES LTD.
 * YOU AGREE TO KEEP ALL SOURCE CODES OF THE SOFTWARE IN CONFIDENCE. YOU MAY NOT TRANSFER
 * OR ASSIGN THE SOFTWARE OR YOUR RIGHTS UNDER THIS AGREEMENT.
 * LIMITED WARRANTY
 * THE SOFTWARE AND ACCOMPANYING WRITTEN MATERIALS (INCLUDING INSTRUCTIONS FOR USE) ARE PROVIDED "AS IS"
 * AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS
 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION)HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
 * IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. YOU ASSUME THE ENTIRE
 * RISK AS TO THE RESULTS AND PERFORMANCE OF THE SOFTWARE.
 * FIDUS TECHNOLOGIES DOES NOT WARRANT THAT THE SOFTWARE WILL MEET ALL YOUR REQUIREMENTS, THAT OPERATIONS
 * OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE, OR THAT ALL SOFTWARE ERRORS WILL BE CORRECTED.
 * FIDUS TECHNOLOGIES-SOFTWARE SOLUTIONS IS NOT RESPONSIBLE FOR PROBLEMS CAUSED BY CHANGES IN THE
 * OPERATING CHARACTERISTICS OF COMPUTER HARDWARE OR COMPUTER OPERATING SYSTEMS WHICH ARE MADE AFTER
 * WHICH ARE MADE AFTER THE RELEASE OF THE SOFTWARE NOR FOR PROBLEMS IN THE INTERACTION OF THE SOFTWARE
 * WITH NON-FIDUS TECHNOLOGIES APPLICATION.WILL HAVE NO RESPONSIBILITY TO REPLACE OR REFUND THE LICENSE FEES
 * FOR MEDIA DAMAGED BY ACCIDENT, ABUSE OR MISAPPLICATION. THIS SOFTWARE IS INTENDED FOR COMMERCIAL,
 * INSTITUTIONAL, AND INDUSTRIAL USERS. THE ABOVE WARRANTIES ARE EXCLUSIVE AND IN LIEU OF ALL OTHER WARRANTIES,
 * WHETHER EXPRESSED OR IMPLIED, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 * PURPOSE AND NON-INFRINGEMENT. NO ORAL OR WRITTEN INFORMATION OR ADVICE GIVEN BY FIDUS TECHNOLOGIES,
 * ITS EMPLOYEES, DISTRIBUTORS, DEALERS OR AGENTS SHALL INCREASE THE SCOPE OF THE ABOVE WARRANTIES OR
 * CREATE ANY NEW WARRANTIES. NEITHER FIDUS TECHNOLOGIES NOR ANYONE ELSE WHO HAS BEEN INVOLVED IN THE
 * CREATION, PRODUCTION OR DELIVERY OF THE SOFTWARE SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL
 * OR INCIDENTAL DAMAGES (INCLUDING DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS LOSSES, BUSINESS
 * INTERRUPTION, LOSS OF DATA, AND THE LIKE) ARISING OUT OF THE USE OR INABILITY TO USE THE SOFTWARE,
 * OR ANY OTHER CLAIM BY ANY PARTY EVEN IF FIDUS TECHNOLOGIES HAS BEEN ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGES. IN THE EVENT FIDUS TECHNOLOGIES IS LIABLE FOR ANY DAMAGES, FIDUS TECHNOLOGIES' LIABILITY
 * FOR DAMAGES SHALL BE LIMITED TO THE AMOUNT PAID FOR THE SOFTWARE UNDER THE TERMS AND CONDITIONS OF THIS
 * AGREEMENT.
 * http://www.fidustechnologies.com
 * Copyright(C) 2010 FIDUS TECHNOLOGIES-Software Solutions(R)
 * All rights reserved.
 */

package com.fidus.inventory.beans.customer;

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Transient;

/**
 *
 * @author Mahesh Kedari<mahesh.kedari@fidustechnologies.com>
 */
@Entity
@Table(name = "Customer_Address_Details")
@NamedQueries({
    @NamedQuery(name = "CustomerAddressDetails.findAll", query = "SELECT c FROM CustomerAddressDetails c"),
    @NamedQuery(name = "CustomerAddressDetails.findByAddressID", query = "SELECT c FROM CustomerAddressDetails c WHERE c.addressID = :addressID"),
    @NamedQuery(name = "CustomerAddressDetails.findByStreetLine1", query = "SELECT c FROM CustomerAddressDetails c WHERE c.streetLine1 = :streetLine1"),
    @NamedQuery(name = "CustomerAddressDetails.findByStreetLine2", query = "SELECT c FROM CustomerAddressDetails c WHERE c.streetLine2 = :streetLine2"),
    @NamedQuery(name = "CustomerAddressDetails.findByCity", query = "SELECT c FROM CustomerAddressDetails c WHERE c.city = :city"),
    @NamedQuery(name = "CustomerAddressDetails.findByState", query = "SELECT c FROM CustomerAddressDetails c WHERE c.state = :state"),
    @NamedQuery(name = "CustomerAddressDetails.findByCountry", query = "SELECT c FROM CustomerAddressDetails c WHERE c.country = :country"),
    @NamedQuery(name = "CustomerAddressDetails.findByPincodeNumber", query = "SELECT c FROM CustomerAddressDetails c WHERE c.pincodeNumber = :pincodeNumber"),
    @NamedQuery(name = "CustomerAddressDetails.findByPhone1", query = "SELECT c FROM CustomerAddressDetails c WHERE c.phone1 = :phone1"),
    @NamedQuery(name = "CustomerAddressDetails.findByPhone2", query = "SELECT c FROM CustomerAddressDetails c WHERE c.phone2 = :phone2"),
    @NamedQuery(name = "CustomerAddressDetails.findByPhone3", query = "SELECT c FROM CustomerAddressDetails c WHERE c.phone3 = :phone3")})
public class CustomerAddressDetails implements Serializable {
    @Transient
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "Address_ID", nullable = false)
    private Integer addressID;
    @Basic(optional = false)
    @Column(name = "Street_Line1", nullable = false, length = 128)
    private String streetLine1;
    @Column(name = "Street_Line2", length = 128)
    private String streetLine2;
    @Column(name = "City", length = 64)
    private String city;
    @Column(name = "State", length = 64)
    private String state;
    @Column(name = "Country", length = 64)
    private String country;
    @Column(name = "Pincode_Number")
    private Integer pincodeNumber;
    @Basic(optional = false)
    @Column(name = "Phone1", nullable = false)
    private int phone1;
    @Column(name = "Phone2")
    private Integer phone2;
    @Column(name = "Phone3")
    private Integer phone3;
    @JoinColumn(name = "Customer_ID", referencedColumnName = "Customer_ID", nullable = false)
    @ManyToOne(optional = false)
    private CustomerDetails customerDetails;

    public CustomerAddressDetails() {
    }

    public CustomerAddressDetails(Integer addressID) {
        this.addressID = addressID;
    }

    public CustomerAddressDetails(Integer addressID, String streetLine1, int phone1) {
        this.addressID = addressID;
        this.streetLine1 = streetLine1;
        this.phone1 = phone1;
    }

    public Integer getAddressID() {
        return addressID;
    }

    public void setAddressID(Integer addressID) {
        Integer oldAddressID = this.addressID;
        this.addressID = addressID;
        changeSupport.firePropertyChange("addressID", oldAddressID, addressID);
    }

    public String getStreetLine1() {
        return streetLine1;
    }

    public void setStreetLine1(String streetLine1) {
        String oldStreetLine1 = this.streetLine1;
        this.streetLine1 = streetLine1;
        changeSupport.firePropertyChange("streetLine1", oldStreetLine1, streetLine1);
    }

    public String getStreetLine2() {
        return streetLine2;
    }

    public void setStreetLine2(String streetLine2) {
        String oldStreetLine2 = this.streetLine2;
        this.streetLine2 = streetLine2;
        changeSupport.firePropertyChange("streetLine2", oldStreetLine2, streetLine2);
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        String oldCity = this.city;
        this.city = city;
        changeSupport.firePropertyChange("city", oldCity, city);
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        String oldState = this.state;
        this.state = state;
        changeSupport.firePropertyChange("state", oldState, state);
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        String oldCountry = this.country;
        this.country = country;
        changeSupport.firePropertyChange("country", oldCountry, country);
    }

    public Integer getPincodeNumber() {
        return pincodeNumber;
    }

    public void setPincodeNumber(Integer pincodeNumber) {
        Integer oldPincodeNumber = this.pincodeNumber;
        this.pincodeNumber = pincodeNumber;
        changeSupport.firePropertyChange("pincodeNumber", oldPincodeNumber, pincodeNumber);
    }

    public int getPhone1() {
        return phone1;
    }

    public void setPhone1(int phone1) {
        int oldPhone1 = this.phone1;
        this.phone1 = phone1;
        changeSupport.firePropertyChange("phone1", oldPhone1, phone1);
    }

    public Integer getPhone2() {
        return phone2;
    }

    public void setPhone2(Integer phone2) {
        Integer oldPhone2 = this.phone2;
        this.phone2 = phone2;
        changeSupport.firePropertyChange("phone2", oldPhone2, phone2);
    }

    public Integer getPhone3() {
        return phone3;
    }

    public void setPhone3(Integer phone3) {
        Integer oldPhone3 = this.phone3;
        this.phone3 = phone3;
        changeSupport.firePropertyChange("phone3", oldPhone3, phone3);
    }

    public CustomerDetails getCustomerDetails() {
        return customerDetails;
    }

    public void setCustomerDetails(CustomerDetails customerDetails) {
        CustomerDetails oldCustomerDetails = this.customerDetails;
        this.customerDetails = customerDetails;
        changeSupport.firePropertyChange("customerDetails", oldCustomerDetails, customerDetails);
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (addressID != null ? addressID.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof CustomerAddressDetails)) {
            return false;
        }
        CustomerAddressDetails other = (CustomerAddressDetails) object;
        if ((this.addressID == null && other.addressID != null) || (this.addressID != null && !this.addressID.equals(other.addressID))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "com.fidus.inventory.beans.company.CustomerAddressDetails[addressID=" + addressID + "]";
    }

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        changeSupport.removePropertyChangeListener(listener);
    }

}
